import { request } from '@/utils/request'

// 基础配置
const BASE_URL = '/user/v1'
const COMMON_URL = '/common/v1'

/**
 * 账户管理接口
 */
export const AccountAPI = {
  // 手机验证码登录
  phoneLoginByCode: (data) => {
    return request({
      url: `${BASE_URL}/account/phoneLoginByCode`,
      method: 'POST',
      data: {
        phone: data.phone,           // 手机号，11位数字
        accountType: data.accountType || 2,  // 账户类型
        code: data.code,             // 验证码
        codeType: data.codeType || 2 // 验证码类型
      }
    })
  },

  // 手机密码登录
  phoneLoginByPassword: (data) => {
    return request({
      url: `${BASE_URL}/account/phoneLoginByPassword`,
      method: 'POST',
      data: {
        phone: data.phone,           // 手机号，11位数字
        accountType: data.accountType || 1,  // 账户类型
        password: data.password      // 密码
      }
    })
  },

  // Token登录
  loginByToken: (data) => {
    return request({
      url: `${BASE_URL}/account/loginByToken`,
      method: 'POST',
      data: data || {}
    })
  },

  // 设置密码
  setPassword: (data) => {
    return request({
      url: `${BASE_URL}/account/setPassword`,
      method: 'POST',
      data: {
        password: data.password      // 新密码
      }
    })
  },

  // 注销账户
  cancellation: (data) => {
    return request({
      url: `${BASE_URL}/account/cancellation`,
      method: 'POST',
      data: data || {}
    })
  },

  // 获取用户信息
  getUserInfo: (data) => {
    return request({
      url: `${BASE_URL}/account/getUserInfo`,
      method: 'POST',
      data: data || {}
    })
  },

  // 获取认证Token
  getAuthToken: (data) => {
    return request({
      url: `${BASE_URL}/account/getAuthToken`,
      method: 'POST',
      data: {
        phone: data.phone,           // 手机号
        accountType: data.accountType || 1,  // 账户类型
        code: data.code,             // 验证码
        codeType: data.codeType || 1 // 验证码类型
      }
    })
  },

  // 通过认证Token设置密码
  setPasswordByAuthToken: (data) => {
    return request({
      url: `${BASE_URL}/account/setPasswordByAuthToken`,
      method: 'POST',
      data: {
        authToken: data.authToken,   // 授权Token
        password: data.password      // 新密码
      }
    })
  },

  // 一键登录
  oneClickLoginByMobile: (data) => {
    return request({
      url: `${BASE_URL}/account/oneClickLoginByMobile`,
      method: 'POST',
      data: {
        phone: data.phone,           // 手机号
        accountType: data.accountType || 1  // 账户类型
      }
    })
  },

  // 退出登录
  logout: (data) => {
    return request({
      url: `${BASE_URL}/account/logout`,
      method: 'POST',
      data: data || {}
    })
  },

  // Apple登录
  appleLogin: (data) => {
    return request({
      url: `${BASE_URL}/account/appleLogin`,
      method: 'POST',
      data: {
        identityToken: data.identityToken,  // Apple身份Token
        appleUserId: data.appleUserId       // Apple用户ID
      }
    })
  },

  // 微信登录
  wechatLogin: (data) => {
    return request({
      url: `${BASE_URL}/account/wechatLogin`,
      method: 'POST',
      data: {
        code: data.code              // 微信授权码
      }
    })
  },

  // QQ登录
  qqLogin: (data) => {
    return request({
      url: `${BASE_URL}/account/qqLogin`,
      method: 'POST',
      data: {
        accessToken: data.accessToken,  // QQ访问Token
        qqOpenId: data.qqOpenId         // QQ开放ID
      }
    })
  },

  // 绑定手机号
  bindPhone: (data) => {
    return request({
      url: `${BASE_URL}/account/bindPhone`,
      method: 'POST',
      data: {
        phone: data.phone,           // 手机号
        code: data.code              // 验证码
      }
    })
  }
}

/**
 * 短信服务接口
 */
export const SmsAPI = {
  // 发送手机验证码
  sendPhoneCode: (data) => {
    return request({
      url: `${BASE_URL}/sms/sendPhoneCode`,
      method: 'POST',
      data: {
        phone: data.phone,           // 手机号
        codeType: data.codeType || 1, // 验证码类型
        type: data.type || 2         // 类型参数
      }
    })
  },

  // 发送绑定手机验证码
  sendBindPhoneCode: (data) => {
    return request({
      url: `${BASE_URL}/sms/sendBindPhoneCode`,
      method: 'POST',
      data: {
        phone: data.phone,           // 手机号
        codeType: data.codeType || 1 // 验证码类型
      }
    })
  }
}

/**
 * 用户信息管理接口
 */
export const UserAPI = {
  // 更新头像
  updateAvatar: (data) => {
    return request({
      url: `${BASE_URL}/updateAvatar`,
      method: 'POST',
      data: {
        avatar: data.avatar          // 头像URL
      }
    })
  },

  // 更新昵称
  updateNickname: (data) => {
    return request({
      url: `${BASE_URL}/updateNickname`,
      method: 'POST',
      data: {
        nickname: data.nickname      // 昵称
      }
    })
  },

  // 加入竞技场
  joinArena: (data) => {
    return request({
      url: `${BASE_URL}/joinArena`,
      method: 'POST',
      data: {
        arenaId: data.arenaId        // 竞技场ID
      }
    })
  },

  // 离开竞技场
  leaveArena: (data) => {
    return request({
      url: `${BASE_URL}/leaveArena`,
      method: 'POST',
      data: {
        arenaId: data.arenaId        // 竞技场ID
      }
    })
  }
}

/**
 * 用户道具管理接口
 */
export const UserPropsAPI = {
  // 创建道具
  create: (data) => {
    return request({
      url: `${BASE_URL}/props/create`,
      method: 'POST',
      data: {
        propsType: data.propsType,                    // 道具类型
        propsName: data.propsName,                    // 道具名称
        propsLevel: data.propsLevel,                  // 道具等级 (1-5)
        propsDescription: data.propsDescription,      // 道具描述
        propsUseType: data.propsUseType,              // 使用方式 (1:手动 2:自动 3:不可用)
        usageEffectId: data.usageEffectId,            // 使用效果ID
        expirationType: data.expirationType,          // 有效期类型 (1:按时间 2:指定时间 3:永久)
        expiration: data.expiration                   // 有效期
      }
    })
  },

  // 查询道具
  find: (data) => {
    return request({
      url: `${BASE_URL}/props/find`,
      method: 'POST',
      data: {
        propsId: data.propsId        // 道具ID
      }
    })
  },

  // 更新道具
  update: (data) => {
    return request({
      url: `${BASE_URL}/props/update`,
      method: 'POST',
      data: {
        propsId: data.propsId,                       // 道具ID
        propsType: data.propsType,                   // 道具类型
        propsName: data.propsName,                   // 道具名称
        propsLevel: data.propsLevel,                 // 道具等级
        propsDescription: data.propsDescription,     // 道具描述
        propsUseType: data.propsUseType,             // 使用方式
        usageEffectId: data.usageEffectId,           // 使用效果ID
        expirationType: data.expirationType,         // 有效期类型
        expiration: data.expiration                  // 有效期
      }
    })
  },

  // 删除道具
  delete: (data) => {
    return request({
      url: `${BASE_URL}/props/delete`,
      method: 'POST',
      data: {
        propsId: data.propsId        // 道具ID
      }
    })
  }
}

/**
 * 用户能力记录接口
 */
export const UserCapacityAPI = {
  // 新建能力记录
  newRecord: (data) => {
    return request({
      url: `${BASE_URL}/capacity/newRecord`,
      method: 'POST',
      data: {
        type: data.type,                    // 测试类型
        capacity: data.capacity,            // 能力值
        difficulty: data.difficulty,        // 难度
        corrected: data.corrected,          // 正确数量
        failed: data.failed,                // 错误数量
        missed: data.missed,                // 遗漏数量
        useTime: data.useTime               // 用时(秒)
      }
    })
  },

  // 查询我的能力记录
  myRecords: (data) => {
    return request({
      url: `${BASE_URL}/capacity/myRecords`,
      method: 'POST',
      data: {
        type: data.type,                    // 测试类型
        pageNum: data.pageNum || 1,         // 页码
        pageSize: data.pageSize || 10       // 每页大小
      }
    })
  }
}

/**
 * 通用服务接口
 */
export const CommonAPI = {
  // 图片上传预签名
  uploadPreSign: (data) => {
    return request({
      url: `${COMMON_URL}/uploadPreSign`,
      method: 'POST',
      data: {
        fileName: data.fileName      // 文件名
      }
    })
  },

  // 地理位置解析
  location: (data) => {
    return request({
      url: `${COMMON_URL}/location`,
      method: 'POST',
      data: {
        longitude: data.longitude,   // 经度
        latitude: data.latitude      // 纬度
      }
    })
  }
}

/**
 * 课程管理接口
 */
export const LessonAPI = {
  // 更新课程
  lessonUpdate: (data) => {
    return request({
      url: `${BASE_URL}/lesson/lessonUpdate`,
      method: 'POST',
      data: {
        lessonId: data.lessonId,     // 课程ID
        subSectionId: data.subSectionId,  // 子章节ID
        score: data.score            // 得分
      }
    })
  },

  // 获取课程列表
  getLessons: (data) => {
    return request({
      url: `${BASE_URL}/lesson/getLessons`,
      method: 'POST',
      data: {
        pageNum: data.pageNum || 1,   // 页码
        pageSize: data.pageSize || 10 // 每页大小
      }
    })
  }
}

/**
 * 接口使用示例
 */
export const APIExamples = {
  // 登录示例
  loginExample: async () => {
    try {
      const result = await AccountAPI.phoneLoginByCode({
        phone: '13800138000',
        accountType: 2,
        code: '123456',
        codeType: 2
      })
      return result
    } catch (error) {
      console.error('登录失败:', error)
      throw error
    }
  },

  // 获取用户信息示例
  getUserInfoExample: async () => {
    try {
      const result = await AccountAPI.getUserInfo({})
      return result
    } catch (error) {
      console.error('获取用户信息失败:', error)
      throw error
    }
  },

  // 发送验证码示例
  sendCodeExample: async (phone) => {
    try {
      const result = await SmsAPI.sendPhoneCode({ 
        phone,
        codeType: 1,
        type: 2
      })
      return result
    } catch (error) {
      console.error('发送验证码失败:', error)
      throw error
    }
  },

  // 更新头像示例
  updateAvatarExample: async (avatarUrl) => {
    try {
      const result = await UserAPI.updateAvatar({ avatar: avatarUrl })
      return result
    } catch (error) {
      console.error('更新头像失败:', error)
      throw error
    }
  }
}

// 导出所有API模块
export default {
  AccountAPI,
  SmsAPI,
  UserAPI,
  UserPropsAPI,
  UserCapacityAPI,
  CommonAPI,
  LessonAPI,
  APIExamples
} 